package com.sheng.project.study.spring.demo03.test4;

import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.core.env.MapPropertySource;

import java.util.Map;

/**
 * @author liusheng
 * @date 2023/07/10
 */
public class RefreshConfigUtil {

    /**
     * 模拟改变数据库中都配置信息
     */
    public static void updateDbConfig(AbstractApplicationContext context) {
        // 更新 context 中的 mailPropertySource 配置信息
        refreshMailPropertySource(context);
        // 清空 BeanRefreshScope 中所有 bean 的缓存
        BeanRefreshScope.clean();
    }

    public static void refreshMailPropertySource(AbstractApplicationContext context) {
        Map<String, Object> mailInfoFromDb = DbUtil.getMailInfoFromDb();
        // 将其丢在 MapPropertySource 中（MapPropertySource 类是 spring 提供的一个类，是 PropertySource 的子类）
        MapPropertySource mailPropertySource = new MapPropertySource("mail", mailInfoFromDb);
        context.getEnvironment().getPropertySources().addFirst(mailPropertySource);
    }
}
